var tagRiotSearchPanelVerif; var tagRiotSearchPanelTris; var tagRiotSearchPanelCteasy; var mymap; var markerByIdLocationList = []; function pageSettings(){ myAlert("Paramètres de recherche non définis côté serveur.", "ERREUR" ); riot.mount('ctrl-search-panel-global',{ context: '', url: '/fr/controle-technique/', vehicle_type_items: [ {code:"VP",name:"Voiture"}, {code:"UTL",name:"Utilitaire"}, {code:"4X4",name:"4x4"}, {code:"CC",name:"Camping-car"}, {code:"COL",name:"Collection"} ], vehicle_energy_items: [ {code:"ESS",name:"Essence"}, {code:"DIE",name:"Diesel"}, {code:"GPL",name:"GPL"}, {code:"HYB",name:"Hybride"}, {code:"ELE",name:"Electrique"} ], locality: '', yearmonth: '', vehicle_type: '', vehicle_energy: '', goToNextFieldAfterSelection: false }); if($("ctrl-search-result-2021-order-buttons").length > 0){ riot.mount('ctrl-search-result-2021-order-buttons',{ sortMode : 2 // Le plus proche par défaut sur les villes, le moins cher par défaut sur les dpmts }); }else{ // cas du chargement mono centre, pas de tris orderList(2); $(".result-location-2021 .indicators").hide(); } //var nextMonthsGoodDeals2021IsLoading = false; /* */ function triggerClickOnNextMonthGoodDeal(monthIncrement){ window.location = navNodeUrl+"?action=goToGoodDealNextMonth|"+monthIncrement; } //loadNextMonthsGoodDeals2021(); // affichage de ma modal si loterie 1 EURO $("#modal-infos-loterie").modal('show'); setTriggersTrustPilotInPopin(); // initScrollPaginationTrigger(); resultLocationResponsiveDesign($(window).width()); searchNextResultsForEmptyCenters(); function writeInSpanMaterialIcon() { const lstSpan = $(".material-icons").toArray(); if (Array.isArray(lstSpan)) { lstSpan.forEach((item) => { const iconName = $(item).data("icon") if(iconName){ $(item).html(iconName) } }) } } writeInSpanMaterialIcon(); } // ------------------- chargement de la MAP ------------------------- var mapIsLoaded = false; function tricoteTheLeaflet(){ if(typeof L === 'undefined'){ alert("Leaflet is not defined !") return; } mymap = L.map('cteasy-map').setView([50.00, 1.00], 13); L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', { attribution: 'Map data © OpenStreetMap contributors, Imagery © Mapbox ', maxZoom: 18, id: 'mapbox/streets-v11', tileSize: 512, zoomOffset: -1, accessToken: 'pk.eyJ1IjoiZGV2MTBjdGVhc3kiLCJhIjoiY2xkOXpzNW56MDYzYjN2bXV0ZXN1bTR3aCJ9.r5hHXToLrPOYztsCgZN7LA' }).addTo(mymap); var locationList = $("#result-list-2021 .result-location-2021"); // var bounds = [] // // // var perimetreKm = 1000; // if(locationList.length > 1) perimetreKm = 50; // if(locationList.length > 5) perimetreKm = 55; // if(locationList.length > 10) perimetreKm = 60; for(var i = 0; i < locationList.length ; i++){ var location = locationList[i]; var lat = $(location).data("maps-lat"); var lng = $(location).data("maps-lng"); var name = $(location).data("maps-name"); var price = $(location).data("maps-price"); //var priceUnit = $(location).data("maps-price-unit-part"); //var priceDeci = $(location).data("maps-price-dec-part"); var basePrice = $(location).data("maps-base-price"); var economiePrct = $(location).data("maps-economie-prct"); var locationId = $(location).data("result-location-id"); var distance = $(location).data("distance"); var loadingMonth = $(location).data("maps-loading-month"); const fontAwesomeIcon = L.divIcon({ // html: ''+ priceUnit +','+ priceDeci +'', html: ''+ price +'', iconSize: [60, 15], className: 'cteasy-map-icon cteasy-map-icon-'+locationId }); try{ var bound = [lat, lng]; if(!!price){ //ajout du marker seulement si le prix est spécifié (= slots dispos) var marker = L.marker(bound,{icon: fontAwesomeIcon}).addTo(mymap); if(loadingMonth){ //marker.bindPopup(renderLeafletPopupContent(name,price,priceUnit,priceDeci,basePrice,economiePrct,locationId,loadingMonth)); marker.bindPopup(renderLeafletPopupContent(name,price,basePrice,economiePrct,locationId,loadingMonth)); }else{ //marker.bindPopup(renderLeafletPopupContent(name,price,priceUnit,priceDeci,basePrice,economiePrct,locationId)); marker.bindPopup(renderLeafletPopupContent(name,price,basePrice,economiePrct,locationId)); } markerByIdLocationList.push({'marker':marker,'idLocation':locationId}); } }catch(e){ devlog(e) } } // calage de la map sur les points des locations flyMapToLocationBounds(); // set trigger on map popup buttons "Réserver" $('.search-results').on('click', '.leaflet-popup-button', function(){ const idLocation = $(this).data("id-location"); const lstReserverButtons = Object.values($(".search-results .btn-voir-planning")); // recherche du bouton dans la liste des résultats qui à la même id Location const button = lstReserverButtons.find(b => $(b).data("result-location-id") === idLocation); // déclenche le click sur le bouton de la liste if(button != undefined){ $(button).click(); mymap.closePopup(); } }); // état de sélection du picto sur ouverture de la popup mymap.on('popupopen', function(e) { const marker = e.popup._source; const icon = marker._icon; //const iconHtml = icon.options.html; $(icon).addClass("cteasy-icon-activated"); }); // état de sélection du picto sur fermeture de la popup mymap.on('popupclose', function(e) { const marker = e.popup._source; const icon = marker._icon; //const iconHtml = icon.options.html; $(icon).removeClass("cteasy-icon-activated"); }); mapIsLoaded = true; } /* * Génére le contenu des popups sur liées aux markers de la map * */ // renderLeafletPopupContent(name,price,priceUnit,priceDeci,basePrice,economiePrct,locationId,loadingMonth)); //function renderLeafletPopupContent(name,bestPrice,priceUnit,priceDeci,basePrice,economiePrct,idLocation,nextMonthDispo){ function renderLeafletPopupContent(name,price,basePrice,economiePrct,idLocation,nextMonthDispo){ var content = $("
"); var titre = $("").addClass("name").html(name).appendTo(content); var basePrice = $("").addClass("base-price").html(basePrice + '€').appendTo(content); var bestPrice = $("").addClass("best-price").appendTo(content); //bestPrice.html(''+ priceUnit +','+ priceDeci +'€'); //console.log("renderLeafletPopupContent"); bestPrice.html(''+ price +'€'); var ecoPrct = $("").addClass("eco-prct").html("- " + economiePrct + '%').appendTo(bestPrice); var button = $("").addClass("leaflet-popup-button") .attr("data-id-location", idLocation) .html("J'en profite").appendTo(content); if(nextMonthDispo){ //button.html("Dispo en "+ nextMonthDispo).addClass("next-month-dispo"); button.html("J'en profite").addClass("next-month-dispo"); } return content.prop('outerHTML'); // retourne une string et non pas un élément HTML } function setTriggersTrustPilotInPopin(){ // AVIS en MODAL $("a.open-avis").each(function(index,el){ var url = $(el).attr("href"); var newElement = $(""); newElement.html($(el).html()); //newElement.data("url",url); newElement.attr("data-url",url); newElement.addClass("like-a-link"); $(el).replaceWith(newElement); $(newElement).click(function(e){ var url = $(this).data("url"); loadTrustPilotInPopin(url,$(this).html()); }); }); } /* Fonction de TRI ex d'utilisation : triParInsertion([5,3,6,2,1] , function(a, b){ return a < b;}) */ function triParInsertion(t , f){ for(var i=1 ; i < t.length ; i++){ var temp= t[i] ; var j = i-1 ; while( f(temp, t[j]) && j>=0){ t[j+1]= t[j] j-- ; }; t[j+1]=temp ; } return t; } function orderList(sortMode){ var responsiveLimitWidth = 991; var list = $("#result-list-2021 .result-location-2021"); $(".col-search-results-list").show(); // définition de la fonction de tri var fOrder; $(".col-search-results-list").show(); if(sortMode==1){ // tri par prix fOrder = function(a,b){ var prix1 = $(a).data("price"); var prix2 = $(b).data("price"); if(prix1 == undefined || prix1 == 0)prix1 = 9999; if(prix2 == undefined || prix2 == 0)prix2 = 9999; if(prix1 == prix2){ // si égalité de prix, tri secondaire sur la distance var dist1 = $(a).data("distance"); var dist2 = $(b).data("distance"); return dist1 < dist2; }else{ return prix1 < prix2; } } }else if(sortMode==2){ // tri par distance fOrder = function(a,b){ var dist1 = $(a).data("distance"); var prix1 = $(a).data("price"); var tpr1 = $(a).data("trustpilot-rank"); if(prix1 == undefined || prix1 == 0)dist1 += 1000; var dist2 = $(b).data("distance"); var prix2 = $(b).data("price"); var tpr2 = $(b).data("trustpilot-rank"); if(prix2 == undefined || prix2 == 0)dist2 += 1000; if(dist1 == dist2){ if(prix1 == undefined || prix1 == 0)tpr1 -= 1000; if(prix2 == undefined || prix2 == 0)tpr2 -= 1000; return tpr2 < tpr1; }else{ return dist1 < dist2; } } }else if(sortMode==3){ // tri par avis fOrder = function(a,b){ var tpr1 = $(a).data("trustpilot-rank"); var prix1 = $(a).data("price"); if(prix1 == undefined || prix1 == 0)tpr1 -= 1000; var tpr2 = $(b).data("trustpilot-rank"); var prix2 = $(b).data("price"); if(prix2 == undefined || prix2 == 0)tpr2 -= 1000; return tpr2 < tpr1; } }else if(sortMode==4){ // affichage de la map (fonction dispo uniquement pour les small devices) $(".col-search-results-list").hide(); $(".col-search-results-map").show(); if(!mapIsLoaded){ tricoteTheLeaflet(); } } //data-trustpilot-rank if(sortMode!=4){ //masque la carte si small device if($(window).width() <= responsiveLimitWidth){ $(".col-search-results-map").hide(); } //remettre les liens like-a-link dans leur état d'origine $("span.like-a-link").each(function(index,el){ var url = $(el).data("url"); var newElement = $(""); newElement.html($(el).html()); newElement.attr("href",url); newElement.addClass("open-avis"); $(el).replaceWith(newElement); }); // tri de la liste list = triParInsertion(list,fOrder); // suppression et réinsertion de la liste //$("#result-list-2021").fadeIn(200,function(){ $("#result-list-2021").empty(); //}) // réinjection des éléments dans le bon ordre $(list).each(function(index,el){ $("#result-list-2021").append(el); //$("#result-list-2021").fadeOut(200); }); // trigers sur les boutons 'J'en profite' setBtnPlanningTriggers(); // triggers sur les liens avis en popin setTriggersTrustPilotInPopin(); // pagination initLightPagination(25,100); setTriggerMapOnResultLocationMouseOver(); } // important : générer la map après avoir trié pour le centrage de la map sur les markers les + proches if(!mapIsLoaded && $(window).width() > responsiveLimitWidth){ tricoteTheLeaflet(); } } // sur le survol d'un résultat de la liste, affichage de la popin sur la map function markerPopupOpen(idLocation){ if(!!mymap) mymap.closePopup(); const markerByIdLocation = markerByIdLocationList.find(m => m.idLocation === idLocation); if(markerByIdLocation !== undefined){ markerByIdLocation.marker.openPopup(); } } //évènementiel de déclenchement de la popup sur la map depuis la liste function setTriggerMapOnResultLocationMouseOver(){ $("div.result-location-2021") .mouseover(function(){ const idLocation = $(this).data("result-location-id"); markerPopupOpen(idLocation); }) .mouseout(function(){ if(!!mymap) mymap.closePopup(); }); } // initialisation des premiers resultLocation visibles function initLightPagination(nbResults, increment){ var listComponent = $(".search-results-list .result-list-2021 .result-location-2021"); if(listComponent.length <= nbResults) return; $(listComponent).show(); // réinitialisation nécessaire après les tris $(listComponent).filter(function( index ) { //console.log('index = '+index); return index >= nbResults; }).hide(); var buttons = $(".search-results-list #buttonMoreResults"); if(!buttons || !buttons[0]){ initButtonMoreResults(increment); } } function initButtonMoreResults(increment){ if($(".search-results-list .result-list-2021 .result-location-2021:hidden").length > 0){ var button = $("") .attr("id","buttonMoreResults") .addClass("btn").addClass("btn-more-results") .html("Afficher plus de centres") .appendTo(".search-results-list"); button.click(() => showMore(increment)); } } function showMore(increment){ devlog('showMore ' + increment); var visibleResultLocationList = $(".search-results-list .result-list-2021 .result-location-2021:visible"); var lastVisibleResultLocation = visibleResultLocationList[visibleResultLocationList.length - 1]; // affiche les n résultats suivants $(".search-results-list .result-list-2021 .result-location-2021:hidden").filter(function( index ) { //console.log('index = '+index); return index < increment; }).fadeIn(); // si plus rien à afficher, le bouton disparaît if($(".search-results-list .result-list-2021 .result-location-2021:hidden").length == 0){ $(".search-results-list #buttonMoreResults").remove(); } } var firstClickOnBtnPlanning = false; function setBtnPlanningTriggers(){ // action affichage planning sur les centres $(".btn-voir-planning").click(function(){ showPlanning(this); }); $(".loterie-inscription.plus-d-infos").click(function(){ $("#modal-infos-loterie").modal('show'); }); } function showPlanning(btn){ var myConfirmWindow = $("#my-confirm").length; if(myConfirmWindow > 0)return; // pour éviter les doublons var idLocation = $(btn).data("result-location-id"); var year = $(btn).data("search-year"); var month = $(btn).data("search-month"); var vehicleType = $(btn).data("search-vehicle-type"); var energyType = $(btn).data("search-energy-type"); var locationCity = $(btn).data("search-location-city"); var locationName = $(btn).data("search-location-name"); var params = { 'context': '', 'url': '/fr/controle-technique-centre/', 'locationId': idLocation, 'locationCity': locationCity, 'locationName': locationName, 'year': year, 'month': month, 'prestationType': 'CT', 'vehicleType': vehicleType, 'energyType': energyType }; const array_month = ["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"]; if(firstClickOnBtnPlanning && vehicleType=='LEGER' && energyType =='ESSENCE'){ myConfirm("
Merci de vérifier les éléments de votre recherche :
Ville : "+locationCity+" - Mois : " + array_month[month-1] + " - Type : VOITURE - ESSENCE.
", "ATTENTION !","md","Lancer la recherche", "Modifier","modal-title-red").then( function() { firstClickOnBtnPlanning = false; riot.mount('ctrl-resplan-modal',params); }); }else{ firstClickOnBtnPlanning = false; riot.mount('ctrl-resplan-modal',params); } } function loadTrustPilotInPopin(url, titre){ var msgLoading = " Chargement du document"; if($(window).width() > 1024){ myAlert(msgLoading, 'TRUSTPILOT ' + titre, 'lg reservation-trust-pilot'); $("#my-alert > .modal-dialog").css("max-width","850px"); var iframe = $("